Estrutura da Aula

  1. Gramática dos Gráficos
  2. O funcionamento básico do ggplot2
  3. Customização de figuras do ggplot2
  4. Integrando o ggplot2 ao tidyverse
  5. Figuras em múltiplos painéis
  6. Exportando figuras do ggplot2
  7. Exercícios

Exercício 1

  1. Como você descreveria a figura abaixo?
  1. Que tipo de figura poderia ser feita com os dados abaixo? O que esta figura representaria?
##   var1    var2   x   y
## 1    a fechado 2.0 1.0
## 2    b fechado 3.0 1.5
## 3    a fechado 2.5 1.4
## 4    b  aberto 5.0 4.2
## 5    a  aberto 6.0 4.0
## 6    b  aberto 5.5 4.6

1. Gramática dos Gráficos

“Resumidamente, a gramática nos diz que um gráfico deve ser mapeado (mapping) a partir dos dados (data), de acordo com a aparência (aesthetic; color, formato, tamanho) de objetos geométricos (geometric; pontos, linhas, barras). A figura também pode conter transformações estatísticas dos dados, sendo desenhada a partir de um sistema específico de coordenadas.” (Do livro “ggplot2”)

2. ggplot2

# uma forma de carregar o ggplot2 e mais todos os pacotes de manipulação e limpeza de dados
library(tidyverse)
# outra opção, mas só carrega o ggplot2!
library(ggplot2)

Exercício 2

  1. Importe para o R a tabela de dados das ilhas.xlsx, e atribua esta tabela ao objeto ilhas.
  2. Importe também o conjunto de dados referentes às informações dos projetos financiados pelo CNPq (dados dos projetos.csv) e atribua estes dados ao objeto dados.

  • Toda figura criada através do ggplot2 começa da mesma forma: através da função ggplot().
  • Existem duas formas de iniciar uma figura através dessa função, sendo a primeira delas dizendo o que iremos desenhar: mapearemos uma unidade estética que virá de um conjunto de dados.
ggplot(data = ilhas, mapping = aes(x = area, y = riqueza))

  • Uma vez que já definimos que unidade estética será mapeada, precisamos definir de que forma esta relação será representada.
  • A representação destas relações é feita através de representações geométricas, que indicam o tipo de figura que gostaríamos de produzir.
  • Como queremos adicionar uma representação geométrica à unidade estética que foi mapeada precisamos, literalmente, adicionar uma camada à outra, utilizando o sinal + ao final da linha.
ggplot(data = ilhas, mapping = aes(x = area, y = riqueza)) +
  geom_point()

  • Note, no entanto, que o gráfico sugere uma forte relação não-linear - o que é esperado ao plotarmos a área contra a riqueza de espécies em sua escala natural.
  • Assim como outros pacotes, o ggplot2 permite que adicionemos transformações às variáveis que estamos mapeando.
ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) +
  geom_point()

  • Ou então podemos adicionar estas transformações diretamente à escala dos eixos!
ggplot(data = ilhas, mapping = aes(x = area, y = riqueza)) +
  geom_point() +
  scale_x_continuous(trans = "log") +
  scale_y_continuous(trans = "log")


Exercício 3

  1. Crie uma figura que represente de que forma o valor total gasto nos projetos varia com o valor total fornecido;
  2. Crie outra figura que represente a variação no valor total gasto nos projetos de acordo com o tipo de bolsa de produtividade que cada pesquisador recebe (explore outros tipos de representações geométricas digitando geom_ e apertando o tab, e selecione aquela representação que melhor ilustra a relação entre uma variável contínua e uma categórica).

  • Podemos adicionar tantas representações geométricas quanto quisermos à uma figura, desde que faça sentido adicionar uma camada à outra já existente.
  • Por exemplo, podemos adicionar uma representação geométrica indicando a tendência da relação entre a área e a riqueza de espécies.
ggplot(data = ilhas, mapping = aes(x = area, y = riqueza)) +
  geom_point() +
  geom_smooth(method = "lm") +
  scale_x_continuous(trans = "log") +
  scale_y_continuous(trans = "log")

  • Note que aqui a ordem das representações geométricas altera o resultado final do gráfico! Assim, é importante que você pense nesses detalhes durante o processo de criação de uma figura.
ggplot(data = ilhas, mapping = aes(x = area, y = riqueza)) +
  geom_smooth(method = "lm") +
  geom_point() +
  scale_x_continuous(trans = "log") +
  scale_y_continuous(trans = "log")

Formas alternativas de criação de uma figura do ggplot2
  • Uma maneira alternativa a criar uma figura no ggplot2 é começando através de um gráfico em branco, e ir adicionando as informações que queremos mapear camada a camada.
  • Todavia, ao utilizar este método será necessário dizer à função quais são os dados e quais são os elementos estéticos que serão mapeados em cada camada.
ggplot()

ggplot() +
  geom_point(data = ilhas, mapping = aes(x = area, y = riqueza))

ggplot() +
  geom_point(data = ilhas, mapping = aes(x = area, y = riqueza)) +
  geom_smooth(data = ilhas, mapping = aes(x = area, y = riqueza), method = "lm") +
  scale_x_continuous(trans = "log") +
  scale_y_continuous(trans = "log")

  • Finalmente, uma terceira forma de iniciar uma figura é determinando apenas o conjunto de dados de onde sairão todas as informações, e determinar o que será mapeado em cada camada
ggplot(data = ilhas) +
  geom_point(data = ilhas, mapping = aes(x = area, y = riqueza)) +
  geom_smooth(data = ilhas, mapping = aes(x = area, y = riqueza), method = "lm") +
  scale_x_continuous(trans = "log") +
  scale_y_continuous(trans = "log")

Mapear desde o início ou não?
  • Existe uma diferença fundamental na forma como começamos a desenhar um gráfico no ggplot2, que podemos usar ao nosso favor dependendo do objetivo e dados que temos:
    • Especificar apenas o conjunto de dados na função ggplot: útil quando todas as informações que irão para cada geom estão dentro de uma mesma tabela.
    • Especificar o conjunto de dados e a unidade estética dentro da função geom: útil quando cada geom representa informações presentes em conjunto de dados diferentes.
    • Especficiar o conjunto de dados e a unidade estética dentro da função ggplot: útil quando toda a figura é feita com referência àquela unidade estética vinda daquele conjunto de dados.
  • Dependendo da forma como você escolher desenhar a figura, você pode ter problemas ao definir alguns outros elementos gráficos - falaremos mais sobre isso depois.
Criando uma figura do ggplot2 objeto-a-objeto
  • Não precisamos criar todas as camadas de uma vez ao desenhar uma figura no ggplot2: podemos criar uma camada, atribuir ela a um objeto, adicionar mais uma camada a esse objeto e sobre-escrevelo, e assim sucessivamente.
figura <- ggplot(data = ilhas, mapping = aes(x = area, y = riqueza))
figura

figura <- figura +
    geom_point()
figura

figura <- figura +
  geom_smooth(method = "lm") +
  scale_x_continuous(trans = "log") +
  scale_y_continuous(trans = "log")
figura


Exercício 4

  1. Coloque cada uma das duas figuras que você criou no Exercício 3 em um objeto objeto diferente, com o nome de sua escolha.

3. Customização de figuras do ggplot2

ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) +
  geom_point(size = 4)

ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) +
  geom_point(size = 4, shape = 21)

ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) +
  geom_point(size = 4, shape = 21, fill = "grey50")

ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) +
  geom_point(size = 4, shape = 21, fill = "grey50", colour = "blue3")

ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) +
  geom_point(size = 4, shape = 21, fill = "grey50", colour = "blue3", stroke = 2)

ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) +
  geom_point(size = 4, shape = 21, fill = "grey50", colour = "blue3", stroke = 2, alpha = 0.4)


Exercício 5

  1. Customize as duas figuras que você transformou em objeto no último exercício, modificando cores, tipos de linha, espessura das linhas e etc.

  • A customização das representações geométricas da forma como estamos fazendo aplica as opções selecionadas a todos os elementos da figura de forma similar. Por outro lado, muitas vezes queremos aplicar características diferentes para grupos diferentes dos dados ou, ainda, fazer com que o aspecto visual dos dados em uma figura varie de forma contínua com alguma de suas características.
  • Para tal, devemos mapear a característica estética desejada à uma ou mais variáveis categóricas e/ou contínuas do conjunto de dados em questão.
ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza), colour = ilha)) +
  geom_point()

# outra forma de fazer isso
ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) +
  geom_point(mapping = aes(colour = ilha))

# e mais uma forma
ggplot() +
  geom_point(data = ilhas, mapping = aes(x = log(area), y = log(riqueza), colour = ilha))

  • A principal diferença entre a primeira fora e as duas outras é que, na primeira, diferentes cores para a variável ilha serão mapeadas em toda e qualquer camada que você adicionar, enquanto que nas duas outras as diferentes cores para a variável ilha só serão aplicada àquela camada em especial.
  • Também é importante notarmos algumas coisas ao mapearmos variáveis à unidade estética:
    • A característica que será mapeada à variável deve estar dentro do mapping!
      • geom_point(mapping = aes(colour = ilha)) vs geom_point(colour = ilha)
    • O nome da variável que será mapeada a alguma dessas características nunca deve estar entre aspas!
      • geom_point(mapping = aes(colour = ilha)) vs geom_point(mapping = aes(colour = "ilha"))
    • Podemos mapear múltiplas variáveis ao mesmo tempo.
ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza), 
                                   colour = ilha, shape = arquipelago, size = produtividade)) +
  geom_point()

  • Cabe ressaltar que caso você mapeie uma característica estética à uma variável e também determine o valor desta característica estética sem que ela esteja mapeada, então esta última toma precedência sobre a primeira. Portanto, uma vez que uma características estética tenha sido mapeada, tenha atenção para não tentar definir ela novamente na função.
ggplot() +
  geom_point(data = ilhas, mapping = aes(x = log(area), y = log(riqueza), colour = ilha), 
             colour = "blue3")

  • Temos visto até aqui como informar ao ggplot2 que queremos mapear certas características a alguns elementos estéticos de uma figura. Além disso, uma vez que estes elementos estejam mapeados, podemos customizar também a forma pela qual eles são representados. Isto é, customizamos a customização de uma figura através da alteração de suas escalas.
  • Toda a personalização do que é mapeado é feita através de camadas que descrevem a escala da figura:
    • scale_x_?: modifica as opções de apresentação do eixo x;
    • scale_y_?: modifica as opções de apresentação do eixo y;
    • scale_fill_?: modifica o preenchimento do objeto (fill) de forma determinada pelo usuário;
    • scale_colour_?: modifica a cor dos pontos ou das bordas do objeto geométrico (colour) de forma determinada pelo usuário;
    • scale_shape_?: modifica o formato dos pontos (shape) de forma determinada pelo usuário;
    • scale_size_?: modifica o tamanho dos pontos (size) de forma determinada pelo usuário;
    • scale_alpha_?: modifica a transparência (alpha) de forma determinada pelo usuário;
    • scale_linetype_?: modifica o tipo de linha (linetype) de forma determinada pelo usuário.
# adicionando um título aos eixos x e y, modificando a posição das legendas dos eixos e editando o texto das legendas
ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) + 
  geom_point(mapping = aes(colour = ilha, shape = arquipelago, size = log(produtividade))) +
  scale_y_continuous(name = "Riqueza de Especies (log)", breaks = seq(from = 1, to = 4, by = 1))  +
  scale_x_continuous(name = "Area (km2, log)", breaks = seq(from = -4, to = 12, by = 2), labels = c(-4, "", 0, "", 4, "", 8, "", 12))

# fornecendo o nome de duas cores para preencher as figuras geométricas, mapeados ao tipo de ilha
ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) + 
  geom_point(mapping = aes(colour = ilha, shape = arquipelago, size = log(produtividade))) +
  scale_y_continuous(name = "Riqueza de Especies (log)", breaks = seq(from = 1, to = 4, by = 1))  +
  scale_x_continuous(name = "Area (km2, log)", breaks = seq(from = -4, to = 12, by = 2), labels = c(-4, "", 0, "", 4, "", 8, "", 12)) +
  scale_colour_manual(values = c("indianred3", "deepskyblue3"))

# fornecendo o código para três novos formatos de figuras geométricas, mapeados ao tipo de arquipelago
ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) + 
  geom_point(mapping = aes(colour = ilha, shape = arquipelago, size = log(produtividade))) +
  scale_y_continuous(name = "Riqueza de Especies (log)", breaks = seq(from = 1, to = 4, by = 1))  +
  scale_x_continuous(name = "Area (km2, log)", breaks = seq(from = -4, to = 12, by = 2), labels = c(-4, "", 0, "", 4, "", 8, "", 12)) +
  scale_colour_manual(values = c("indianred3", "deepskyblue3")) +
  scale_shape_manual(values = c(18, 15, 17))

# fornecendo o código para três novos formatos de figuras geométricas, mapeados ao tipo de arquipelago
ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) + 
  geom_point(mapping = aes(colour = ilha, shape = arquipelago, size = log(produtividade))) +
  scale_y_continuous(name = "Riqueza de Especies (log)", breaks = seq(from = 1, to = 4, by = 1))  +
  scale_x_continuous(name = "Area (km2, log)", breaks = seq(from = -4, to = 12, by = 2), labels = c(-4, "", 0, "", 4, "", 8, "", 12)) +
  scale_colour_manual(values = c("indianred3", "deepskyblue3")) +
  scale_shape_manual(values = c(18, 15, 17)) +
  scale_size_continuous(range = c(1, 10))

# fornecendo os limites de tamanho que os pontos podem assumir
ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) + 
  geom_point(mapping = aes(colour = ilha, shape = arquipelago, size = log(produtividade))) +
  scale_y_continuous(name = "Riqueza de Especies (log)", breaks = seq(from = 1, to = 4, by = 1))  +
  scale_x_continuous(name = "Area (km2, log)", breaks = seq(from = -4, to = 12, by = 2), labels = c(-4, "", 0, "", 4, "", 8, "", 12)) +
  scale_colour_manual(values = c("indianred3", "deepskyblue3")) +
  scale_shape_manual(values = c(18, 15, 17)) +
  scale_size_continuous(range = c(1, 10))

Exercício 6

  1. Personalize as duas figuras que você tem trabalhado até aqui, e mapeou as características que gostaria de customizar no Exercício 5.

  • Um importante aspecto negligenciado por grande parte das pessoas que acabam usando o ggplot2 é esse fundo cinza e grids, que são legais para explorar visualmente os dados, mas são péssimos para uma publicação.
  • Esses e outros aspectos visuais gerais de um gráfico do ggplot2 são o tema dele, sendo controlados por uma função de mesmo nome - theme.
  • Sempre modifique e edite o tema que você usa ao criar uma figura do ggplot!
  • Existem muitos temas pré-definidos que estão disponíveis quando você carrega o ggplot2.
## colocando a figura criada em um objeto
figura <- ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) + 
  geom_point(mapping = aes(colour = ilha, shape = arquipelago, size = log(produtividade))) +
  scale_y_continuous(name = "Riqueza de Especies (log)", breaks = seq(from = 1, to = 4, by = 1))  +
  scale_x_continuous(name = "Area (km2, log)", breaks = seq(from = -4, to = 12, by = 2), labels = c(-4, "", 0, "", 4, "", 8, "", 12)) +
  scale_colour_manual(values = c("indianred3", "deepskyblue3")) +
  scale_shape_manual(values = c(18, 15, 17)) +
  scale_size_continuous(range = c(1, 10))
figura

# adicionando o tema preto-e-branco disponível no pacote do ggplot2
figura +
  theme_bw()

# testando um tema mais clássico
figura +
  theme_classic()

  • E existem outros temas pré-definidos disponíveis em pacotes como o ggthemes.
# carregando o pacote
library(ggthemes)
# utilizando um tema similar aquele que obteríamos caso tivéssemos criado uma figura utilizando a base do R
figura +
  theme_base()

# um tema que imita o formato do Excel
figura +
  theme_excel_new()

  • Como tudo no ggplot2, o ideal é sempre personalizarmos aquilo que estamos desenhando. Para modificar o tema desta forma, precisamos modificar os padrões de valores que existe dentro da função theme, adicionando esta camada de personalização à nossa figura.
# removendo a legenda da figura
figura +
  theme(legend.position = "none")

  • Todos os elementos do tema são manipulados de acordo com a sua natureza:
    • element_text: elementos textuais;
    • element_rect: elementos que têm a forma de um retângulo;
    • element_line: elementos que têm a forma de linha;
    • element_blank: suprime uma opção.
# removendo os grids do painel
figura +
  theme(legend.position = "none",
        panel.grid = element_blank())

# removendo o plano de fundo do painel
figura +
  theme(legend.position = "none",
        panel.grid = element_blank(),
        panel.background = element_blank())

# adicionando linhas aos eixos x e y
figura +
  theme(legend.position = "none",
        panel.grid = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(colour = "black"))

# modificando o texto dos eixos
figura +
  theme(legend.position = "none",
        panel.grid = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(colour = "black"),
        axis.text = element_text(colour = "black", size = 12))

# modificando o título dos eixos
figura +
  theme(legend.position = "none",
        panel.grid = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(colour = "black"),
        axis.text = element_text(colour = "black", size = 12),
        axis.title = element_text(colour = "black", size = 14, face = "bold"))

  • Quando estamos preparando uma figura para a publicação, muitas revistas exigem uma formatação pré-definida destas características visuais de uma figura - definidas pelo theme. Note então que uma vez definida as linhas de código que descrevem o tema para uma figura do ggplot2 basta utilizá-la para a criação de novas figuras. Existem duas formas de fazer isso:
    • Copiando as linhas de código e colocando elas na nova figura;
    • Atribuindo o tema criado a um objeto, e utilizando este objeto na nova figura.
# colocando todas as características do tema de uma figura dentro de um objeto
meu_tema <- theme(legend.position = "none",
                  panel.grid = element_blank(),
                  panel.background = element_blank(),
                  axis.line = element_line(colour = "black"),
                  axis.text = element_text(colour = "black", size = 12),
                  axis.title = element_text(colour = "black", size = 14, face = "bold"))
# adicionando esta cama à figura que estamos criando
figura <- figura +
  meu_tema
figura

Exercício 7

  1. Personalize o tema das duas figuras que você tem trabalhado até aqui.

4. Integrando o ggplot2 ao tidyverse

# qual a riqueza de espécies média e o erro associado a essa estimativa de acordo com tipo de ilha
ilhas %>% 
  group_by(ilha) %>% 
  summarise(media = mean(riqueza), desvio = sd(riqueza), 
            observacoes = n(), erro_padrao = desvio/observacoes)
## # A tibble: 2 x 5
##   ilha     media desvio observacoes erro_padrao
##   <chr>    <dbl>  <dbl>       <int>       <dbl>
## 1 costeira  29.5   10.8          40       0.270
## 2 oceanica  15.4   16.5          40       0.413
# gerando uma figura que represente esta diferença a partir do resultado do processamento
ilhas %>% 
  group_by(ilha) %>% 
  summarise(media = mean(riqueza), desvio = sd(riqueza), 
            observacoes = n(), erro_padrao = desvio/observacoes) %>% 
  ggplot(mapping = aes(x = ilha, y = media, fill = ilha)) +
  geom_bar(stat = "identity", colour = "black") +
  geom_errorbar(mapping = aes(ymin = media - erro_padrao, ymax = media + erro_padrao), 
                stat = "identity", colour = "black", width = 0.5) +
  meu_tema

# calculando o sumario estatistico para cada nivel do tipo de ilha e do tamanho do arquipelago
ilhas %>% 
  group_by(ilha, arquipelago) %>% 
  summarise(media = mean(riqueza), desvio = sd(riqueza), 
            observacoes = n(), erro_padrao = desvio/observacoes) 
## # A tibble: 6 x 6
## # Groups:   ilha [?]
##   ilha     arquipelago media desvio observacoes erro_padrao
##   <chr>    <chr>       <dbl>  <dbl>       <int>       <dbl>
## 1 costeira grande      41.5    7.69           6       1.28 
## 2 costeira medio       30.0    9.73          26       0.374
## 3 costeira pequeno     18.9    3.91           8       0.488
## 4 oceanica grande      25.4   23.1           14       1.65 
## 5 oceanica medio       12.5    9.56          14       0.683
## 6 oceanica pequeno      7.17   4.34          12       0.362
# gerando uma figura que represente esta diferença entre os dois níveis a partir do resultado do processamento
ilhas %>% 
  group_by(ilha, arquipelago) %>% 
  summarise(media = mean(riqueza), desvio = sd(riqueza), 
            observacoes = n(), erro_padrao = desvio/observacoes) %>% 
  ggplot(mapping = aes(x = arquipelago, y = media, fill = ilha)) +
    geom_errorbar(mapping = aes(ymin = media - erro_padrao, ymax = media + erro_padrao), 
                stat = "identity", colour = "black", width = 0.5, position = position_dodge(width = 0.4)) +
  geom_point(stat = "identity", colour = "black", shape = 21, size = 6, position = position_dodge(width = 0.4)) +
  meu_tema

# mesmo exemplo anterior, mas para um gráfico de barras
ilhas %>% 
  group_by(ilha, arquipelago) %>% 
  summarise(media = mean(riqueza), desvio = sd(riqueza), 
            observacoes = n(), erro_padrao = desvio/observacoes) %>% 
  ggplot(mapping = aes(x = arquipelago, y = media, fill = ilha)) +
  geom_bar(stat = "identity", colour = "black", position = "dodge2") +
  geom_errorbar(mapping = aes(ymin = media - erro_padrao, ymax = media + erro_padrao), 
                stat = "identity", colour = "black", width = 0.5, position = position_dodge(width = 0.9)) +
  meu_tema

Exercício 8

  1. Crie um gráfico de barras e erro ou de pontos e erro que descreva a variação no índice H dos pesquisadores dependendo de qual bolsa de produtividade eles recebem. Exclua o bolsista de produtividade da categoria ‘SR’.
  2. Crie um novo gráfico, que demonstre as diferenças no índice H dos pesquisadores dependendo simultaneamente de qual bolsa de produtividade eles recebem e de seu gênero. Exclua o bolsista de produtividade da categoria ‘SR’.

5. Figuras em múltiplos painéis

# recriando a figura da regressão que trabalhamos durante a aula
figura <- ggplot(data = ilhas, mapping = aes(x = log(area), y = log(riqueza))) + 
  geom_point(mapping = aes(colour = ilha, shape = arquipelago, size = log(produtividade))) +
  scale_y_continuous(name = "Riqueza de Especies (log)", 
                     breaks = seq(from = 1, to = 4, by = 1))  +
  scale_x_continuous(name = "Area (km2, log)", 
                     breaks = seq(from = -4, to = 12, by = 2), 
                     labels = c(-4, "", 0, "", 4, "", 8, "", 12)) +
  scale_colour_manual(values = c("indianred3", "deepskyblue3")) +
  scale_shape_manual(values = c(18, 15, 17)) +
  scale_size_continuous(range = c(1, 10)) +
  theme_bw()
figura

# funcionalmente similares
figura +
  facet_wrap(~ ilha)

figura +
  facet_grid(~ ilha)

# totalmente diferentes
figura +
  facet_wrap(arquipelago ~ ilha)

figura +
  facet_grid(arquipelago ~ ilha)

# anotando um texto em um painel
figura +
  facet_grid(arquipelago ~ ilha) +
  annotate(geom = "text", x = 4, y = 1.5, label = "Ola")

# um painel
figA <- ilhas %>% 
  filter(ilha == "costeira") %>% 
  ggplot(mapping = aes(x = log(area), y = log(riqueza))) + 
  geom_point(mapping = aes(colour = ilha, shape = arquipelago, size = log(produtividade))) +
  scale_y_continuous(name = "Riqueza de Especies (log)",
                     breaks = seq(from = 1, to = 4, by = 1),
                     limits = c(1, 4.7))  +
  scale_x_continuous(name = "Area (km2, log)", 
                     breaks = seq(from = -4, to = 12, by = 2), 
                     labels = c(-4, "", 0, "", 4, "", 8, "", 12)) +
  scale_colour_manual(values = c("indianred3")) +
  scale_shape_manual(values = c(18, 15, 17)) +
  scale_size_continuous(range = c(1, 10)) +
  theme_bw() +
  theme(legend.position = "none") +
  annotate(geom = "text", x = -3.5, y = 4.5, label = "(a)")

# outro painel
figB <- ilhas %>% 
  filter(ilha == "oceanica") %>% 
  ggplot(mapping = aes(x = log(area), y = log(riqueza))) + 
  geom_point(mapping = aes(colour = ilha, shape = arquipelago, size = log(produtividade))) +
  scale_y_continuous(name = "Riqueza de Especies (log)", 
                     breaks = seq(from = 1, to = 4, by = 1),
                     limits = c(1, 4.7))  +
  scale_x_continuous(name = "Area (km2, log)", 
                     breaks = seq(from = -4, to = 12, by = 2), 
                     labels = c(-4, "", 0, "", 4, "", 8, "", 12)) +
  scale_colour_manual(values = c("deepskyblue")) +
  scale_shape_manual(values = c(18, 15, 17)) +
  scale_size_continuous(range = c(1, 10)) +
  theme_bw() +
  theme(legend.position = "none") +
  annotate(geom = "text", x = -3.5, y = 4.5, label = "(b)")

# carregando o pacote grid e criando figura
library(gridExtra)
grid.arrange(figA, figB, ncol = 2)

6. Exportando figuras do ggplot2

ggsave(filename = "especie_area.png", # nome/diretorio onde a figura será salva
       plot = figura, # objeto que contém a figura que você quer exportar
       width = 80, height = 80, units = "mm", # tamanho final da figura
       dpi = 150 # qualidade da imagem
       )

Exercício 9

  1. Exporte para um diretório do seu computador todas as figuras que você criou nos exercícios anteriores.

Mais sobre o ggplot2